package top.bulk.idgeneration.mapper;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import top.bulk.idgeneration.entity.IdGeneratorEntity;

/**
 * mapper
 *
 * @author 散装java
 * @date 2024-08-07
 */
public interface IdGeneratorMapper {

    @Select("select " +
            "id,biz_type as bizType,max_id as maxId,step,version " +
            "from id_generator where biz_type = #{bizType}")
    IdGeneratorEntity queryByBizType(@Param("bizType") Integer bizType);

    /**
     * 更新
     *
     * @param id       主键id
     * @param newMaxId 新的最大id
     * @param oldMaxId 原本的最大id值
     * @param version  版本号， 用于乐观锁控制
     * @param bizType  业务类型
     * @return 影响行数
     */
    @Update("update id_generator " +
            "set max_id = #{newMaxId}, version = version + 1 " +
            "where id = #{id} and max_id = #{oldMaxId} and biz_type = #{bizType}")
    int updateMaxId(@Param("id") Integer id,
                    @Param("newMaxId") Long newMaxId,
                    @Param("oldMaxId") Long oldMaxId,
                    @Param("version") Long version,
                    @Param("bizType") Integer bizType);
}
